﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using TagThisOrgProject.Models;

namespace TagThisOrgProject.Repository
{
    public class UrlRepository
    {
        private TagContext Context { get; set; }
        public UrlRepository(TagContext context)
        {
            this.Context = context;
        }


        internal Url AddUrl(string url)
        {
            var DbUrl = GetUrl(url);
            if (DbUrl != null)
                return DbUrl;
            return AddUrlWithoutSearching(url);
            
        }
        internal Url AddUrlWithoutSearching(string url, string title = "")
        {
            Uri realUrl;
            try
            {
                realUrl = new Uri(url);
            }
            catch (UriFormatException)
            {
                throw new Exception("Введенная строка не является ссылкой(URI). Код 0001");
            }
            catch (ArgumentNullException)
            {
                throw new Exception("Ссылка не была передана. Код 0002");
            }
            var DbUrl = Context.Url.Add(new Url { Link = realUrl.OriginalString, isFile = realUrl.IsFile, LastModified = DateTime.Now, HostUrl = realUrl.Host, Title = string.IsNullOrEmpty(title) ? null: title });
            try
            {
                Context.SaveChanges();
            }
            catch (Exception e)
            {
                throw new Exception("Ошибка при добавлении ссылки в БД. Код 0003");
            }
            return DbUrl;
        }
        internal Url GetUrl(string p)
        {
            return (from u in this.Context.Url
                    where u.Link == p
                    select u).FirstOrDefault();
        }
        internal Url GetUrl(Int64 id)
        {
            return (from u in Context.Url
                    where u.UrlId == id
                    select u).FirstOrDefault();
        }

        internal bool isUrl(string url)
        {
            var uri = new Uri("http://something.ru");
            return Uri.TryCreate(url, UriKind.RelativeOrAbsolute, out uri);
        }
    }
}